package org.example.core.handler;

import lombok.extern.slf4j.Slf4j;
import org.example.core.exception.auth.AuthorizeException;
import org.example.core.exception.CustomException;
import org.example.core.exception.ExceptionCode;
import org.example.core.exception.order.CreateOrderException;
import org.example.core.exception.upload.UploadException;
import org.example.core.exception.ware.NoLockedStockException;
import org.example.core.utils.R;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;

/**
 * @author 小杰_cc
 * @version 1.0
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {


    /**
     * 全局异常
     */
//    @ExceptionHandler(Exception.class)
//    public R<?> handlerException(Exception e){
//        log.error("系统错误信息:{}",e.getMessage());
//        return R.error(ExceptionCode.ERROR.getCode(),ExceptionCode.ERROR.getMsg());
//    }

    /**
     * 自定义异常
     */
    @ExceptionHandler(CustomException.class)
    public R<?> handlerCustomException(CustomException e){
        log.error("自定义异常信息:{}",e.getMessage());
        return R.error(e.getCode(),e.getMsg());
    }

    /**
     * 权限异常
     */
    @ExceptionHandler(AuthorizeException.class)
    public R<?> handlerAuthorizeException(AuthorizeException e){
        log.error("权限异常信息:{}",e.getMessage());
        return R.error(e.getCode(),e.getMsg());
    }

    /**
     * 数据校验异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public R<?> handlerValidException(MethodArgumentNotValidException e){
        log.error("数据校验异常:{}",e.getMessage());
//        BindingResult result = e.getBindingResult();
//        HashMap<Object, Object> hashMap = new HashMap<>();
//        result.getFieldErrors().forEach(item->{
//            hashMap.put(item.getField(),item.getDefaultMessage());
//        });
        return R.error(ExceptionCode.VALIDATE_ERROR.getCode(),ExceptionCode.VALIDATE_ERROR.getMsg());
    }

    /**
     * 用户图片上传限制
     */
    @ExceptionHandler(UploadException.class)
    public R<?> handlerUploadException(UploadException e){
        log.error("自定义异常信息:{}",e.getMessage());
        return R.error(e.getMsg());
    }

//    /**
//     * 订单下单失败
//     */
//    @ExceptionHandler(CreateOrderException.class)
//    public R<?> handlerCreateOrderException(CreateOrderException e){
//        log.error("创建订单失败:{}",e.getMessage());
//        return R.error(e.getMsg());
//    }
//
//    /**
//     * 订单下单失败
//     */
//    @ExceptionHandler(NoLockedStockException.class)
//    public R<?> handlerNoLockedStockException(NoLockedStockException e){
//        log.error("库存锁定失败:{}",e.getMessage());
//        return R.error(e.getMsg());
//    }
}